/**
 * 标准接口 API - 用于跨小组互通
 * 这些接口遵循统一的接口规范，可供其他小组的前端调用
 */
import request from './request';
import type { ACMode, FanSpeed } from '../types';

/**
 * 空调服务接口 - 标准版
 * 路径前缀: /api/ac
 */
export const acApi = {
  // 获取所有空调状态
  getAllACs() {
    return request.get('/api/ac/all');
  },

  // 获取单个空调状态
  getAC(acId: number) {
    return request.get(`/api/ac/${acId}`);
  },

  // 获取指定房间的空调请求状态
  getRoomACStatus(roomId: string) {
    return request.get(`/api/ac/room/${roomId}`);
  },

  // 房间打开空调
  startAC(roomId: string) {
    return request.post(`/api/ac/room/${roomId}/start`);
  },

  // 更新空调参数
  adjustAC(roomId: string, params: {
    mode?: string;
    fanSpeed?: string;
    targetTemp?: number;
  }) {
    const queryParams = new URLSearchParams();
    if (params.mode) queryParams.append('mode', params.mode);
    if (params.fanSpeed) queryParams.append('fanSpeed', params.fanSpeed);
    if (params.targetTemp) queryParams.append('targetTemp', params.targetTemp.toString());
    
    return request.put(`/api/ac/room/${roomId}/adjust?${queryParams.toString()}`);
  },

  // 更改温度
  changeTemp(roomId: string, targetTemp: number) {
    return request.put(`/api/ac/room/${roomId}/temp?targetTemp=${targetTemp}`);
  },

  // 房间请求关空调
  cancelAC(roomId: string) {
    return request.post(`/api/ac/room/${roomId}/cancel`);
  },

  // 获取当前等待队列
  getWaitingQueue() {
    return request.get('/api/ac/queue/waiting');
  },

  // 获取当前服务队列
  getServiceQueue() {
    return request.get('/api/ac/queue/service');
  },

  // 更改模式
  changeMode(roomId: string, mode: string) {
    return request.put(`/api/ac/room/${roomId}/mode?mode=${mode}`);
  },

  // 更改风速
  changeFanSpeed(roomId: string, fanSpeed: string) {
    return request.put(`/api/ac/room/${roomId}/fanspeed?fanSpeed=${fanSpeed}`);
  },
};

/**
 * 入住服务接口 - 标准版
 * 路径前缀: /api/checkin
 */
export const checkInApi = {
  // 获取所有空闲房间号
  getAvailableRooms() {
    return request.get<string[]>('/api/checkin/available-rooms');
  },

  // 顾客入住指定房间（GET方式 - 使用默认参数）
  checkIn(roomId: string) {
    return request.get(`/api/checkin/${roomId}`);
  },

  // 顾客入住指定房间（POST方式 - 支持完整参数）
  checkInWithDetails(roomId: string, params: {
    guestName?: string;
    guestPhone?: string;
    idCard?: string;
    stayDays?: number;
    roomType?: string;
    mode?: string;
  }) {
    return request.post(`/api/checkin/${roomId}`, params);
  },
};

/**
 * 退房服务接口 - 标准版
 * 路径前缀: /api/checkout
 */
export const checkOutApi = {
  // 办理退房
  checkOut(roomId: string) {
    return request.get(`/api/checkout/${roomId}`);
  },
};

/**
 * 账单服务接口 - 标准版
 * 路径前缀: /api/billing
 */
export const billingApi = {
  // 获取指定房间的账单
  getBilling(roomId: string) {
    return request.get(`/api/billing/${roomId}`);
  },

  // 打印账单
  printBill(roomId: string) {
    return request.get(`/api/billing/${roomId}/bill`);
  },

  // 打印详单
  printDetails(roomId: string) {
    return request.get(`/api/billing/${roomId}/details`);
  },
};

/**
 * 房间服务接口 - 标准版
 * 路径前缀: /api/rooms
 */
export const roomsApi = {
  // 获取所有房间
  getAllRooms() {
    return request.get('/api/rooms');
  },

  // 获取房间的详细信息
  getRoomDetails(roomId: string) {
    return request.get(`/api/rooms/${roomId}`);
  },
};

/**
 * 导出所有标准接口 API
 */
export default {
  ac: acApi,
  checkIn: checkInApi,
  checkOut: checkOutApi,
  billing: billingApi,
  rooms: roomsApi,
};
